/**
 * description: 数据操作
 * author: suyong
 * createdDate: 2020-07-10
 */

// 编辑界面数据填充
// formFieldssData 表示form表单对象
// data 表示编辑详情对象
// extendData 表示编辑详情扩展对象(操作表单元素显隐)
// dynamicFormFields 表示form表单设置对象(在有extendData时需传入)
export function setDynamicFieldsData(formFieldssData, data, extendData, dynamicFormFields) {
  // 修改赋值
  const fatherKeyArr = Object.keys(data)
  const sonKeyArr = Object.keys(formFieldssData)
  fatherKeyArr.forEach(item => {
    if (sonKeyArr.includes(item)) {
      formFieldssData[item] = data[item]
    }
    if (extendData && extendData.length > 0) {
      extendData.forEach(item1 => {
        if (item === item1.parentField && formFieldssData[item] === item1.parentValue) {
          dynamicFormFields.forEach(item2 => {
            if (item1.codeField === item2.codeField) {
              item1.type.forEach(item3 => {
                item2[item3] = !item2[item3]
              })
            }
          })
        }
      })
    }
  })
}

// 表单字段数据展现转换
// formFields 表示form表单集合
// data 表示转换要用到的数据源
// arr 表示键值集合
// codeField 表示要转换的表单字段
export function setDynamicFormFields(formFields, data, arr, codeField) {
  formFields.forEach((item) => {
    if (item.codeField === codeField) {
      if (item.options) {
        item.options = data.map((items) => {
          return {
            value: items[arr[0]],
            label: items[arr[1]]
          }
        })
      }
    }
  })
}

// 表格字段数据展现转换
// tableCols 表示table表格列集合
// data 表示转换要用到的数据源
// arr 表示键值集合
// codeField 表示要转换的表格字段
export function setDynamicTableCols(tableCols, data, arr, codeField) {
  tableCols.forEach((item) => {
    if (item.codeField === codeField) {
      if (item.comps) {
        item.comps.forEach((items) => {
          // 下拉框
          if (items.type === 'dropdownList') {
            if (items.data && items.data.length === 0) {
              items.data = data.map((itemss) => {
                return {
                  value: itemss[arr[0]],
                  label: itemss[arr[1]]
                }
              })
            }
          }

          // 键值转换
          if (items.type === 'diyFilter') {
            items.callback = function(val) {
              let label = ''
              data.forEach((itemss) => {
                if (itemss[arr[0]] === val) {
                  label = itemss[arr[1]]
                }
              })
              return label
            }
          }
        })
      }
    }
  })
}

export default {
  setDynamicFieldsData,
  setDynamicFormFields,
  setDynamicTableCols
}
